package org.koon;
/**
 * Http 头域
 *
 */
public enum Header {

    //------------------------------------------------------------- 通用头域
    /**提供日期和时间标志,说明报文是什么时间创建的*/
    DATE("Date"),
    /**允许客户端和服务器指定与请求/响应连接有关的选项*/
    CONNECTION("Connection"),
    /**给出发送端使用的MIME版本*/
    MIME_VERSION("MIME-Version"),
    /**如果报文采用了分块传输编码(chunked transfer encoding) 方式,就可以用这个首部列出位于报文拖挂(trailer)部分的首部集合*/
    TRAILER("Trailer"),
    /**告知接收端为了保证报文的可靠传输,对报文采用了什么编码方式*/
    TRANSFER_ENCODING("Transfer-Encoding"),
    /**给出了发送端可能想要"升级"使用的新版本和协议*/
    UPGRADE("Upgrade"),
    /**显示了报文经过的中间节点*/
    VIA("Via"),
    /**指定请求和响应遵循的缓存机制*/
    CACHE_CONTROL("Cache-Control"),
    /**用来包含实现特定的指令，最常用的是Pragma:no-cache。在HTTP/1.1协议中，它的含义和Cache- Control:no-cache相同*/
    PRAGMA("Pragma"),
    /**请求表示提交内容类型或返回返回内容的MIME类型*/
    CONTENT_TYPE("Content-Type"),

    //------------------------------------------------------------- 请求头域
    /**指定请求资源的Intenet主机和端口号，必须表示请求url的原始服务器或网关的位置。HTTP/1.1请求必须包含主机头域，否则系统会以400状态码返回*/
    HOST("Host"),
    /**允许客户端指定请求uri的源资源地址，这可以允许服务器生成回退链表，可用来登陆、优化cache等。他也允许废除的或错误的连接由于维护的目的被 追踪。如果请求的uri没有自己的uri地址，Referer不能被发送。如果指定的是部分uri地址，则此地址应该是一个相对地址*/
    REFERER("Referer"),
    /** 指定请求的域 */
    ORIGIN("Origin"),
    /**HTTP客户端运行的浏览器类型的详细信息。通过该头部信息，web服务器可以判断到当前HTTP请求的客户端浏览器类别*/
    USER_AGENT("User-Agent"),
    /**指定客户端能够接收的内容类型，内容类型中的先后次序表示客户端接收的先后次序*/
    ACCEPT("Accept"),
    /**指定HTTP客户端浏览器用来展示返回信息所优先选择的语言*/
    ACCEPT_LANGUAGE("Accept-Language"),
    /**指定客户端浏览器可以支持的web服务器返回内容压缩编码类型*/
    ACCEPT_ENCODING("Accept-Encoding"),
    /**浏览器可以接受的字符编码集*/
    ACCEPT_CHARSET("Accept-Charset"),
    /**HTTP请求发送时，会把保存在该请求域名下的所有cookie值一起发送给web服务器*/
    COOKIE("Cookie"),
    /**请求的内容长度*/
    CONTENT_LENGTH("Content-Length"),

    //------------------------------------------------------------- 响应头域
    /**Cookie*/
    SET_COOKIE("Set-Cookie"),
    /**Content-Encoding*/
    CONTENT_ENCODING("Content-Encoding"),
    /**Content-Disposition*/
    CONTENT_DISPOSITION("Content-Disposition"),
    /**ETag*/
    ETAG("ETag"),
    /** 重定向指示到的URL */
    LOCATION("Location");

    private String value;
    Header(String value) {
        this.value = value;
    }

    public String getValue() {
        return value;
    }


    /**----------------------------**/
    public enum ContentType{
        /** 标准表单编码，当action为get时候，浏览器用x-www-form-urlencoded的编码方式把form数据转换成一个字串（name1=value1&name2=value2…）*/
        FORM_URLENCODED("application/x-www-form-urlencoded"),
        /** 文件上传编码，浏览器会把整个表单以控件为单位分割，并为每个部分加上Content-Disposition，并加上分割符(boundary) */
        MULTIPART("multipart/form-data"),
        /** Rest请求JSON编码 */
        JSON("application/json"),
        /** Rest请求XML编码 */
        XML("application/xml"),
        /** Rest请求XML编码 */
        HTML("text/html"),
        /** Rest请求text/xml编码 */
        TEXT_XML("text/xml");


        private String value;
        ContentType(String value) {
            this.value = value;
        }

        public String getValue() {
            return value;
        }}
}
